/**
 * \* Created with IntelliJ IDEA.
 * \* User: 冯若航
 * \* Date: 2021/6/18
 * \* Time: 21:54
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */

/**
 * 和普通方法相比，构造方法没有返回值（也没有void），调用构造方法，必须用new操作符。
 * 要特别注意的是，如果我们自定义了一个构造方法，那么，编译器就不再自动创建默认构造方法：
 */
public class 构造方法 {

        public static void main(String[] args) {
            构造方法.Person p = new 构造方法.Person("Xiao Ming", 15);
            //要特别注意的是，如果我们自定义了一个构造方法，那么，编译器就不再自动创建默认构造方法：
            //如果既要能使用带参数的构造方法，又想保留不带参数的构造方法，那么只能把两个构造方法都定义出来：
            //没有在构造方法中初始化字段时，引用类型的字段默认是null，数值类型的字段用默认值，int类型默认值是0，布尔类型默认值是false：
            //构造方法.Person p = new 构造方法.Person();  非法操作
            System.out.println(p.getName());
            System.out.println(p.getAge());
        }


    static class Person {
        private String name;
        private int age;



        public String getName() {
            return this.name;
        }

        public int getAge() {
            return this.age;
        }

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
//        可以在构造方法中初始化final字段：
//
//        class Person {
//            public final String name;
//            public Person(String name) {
//                this.name = name;
//            }
//        }
//        这种方法更为常用，因为可以保证实例一旦创建，其final字段就不可修改。
    }
}